package ccnu.agile.command.verlocitygeneric;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;

import java.io.PrintWriter;

/**
 * 模板生成命令接口
 *
 * @author JreamY
 */
public interface IGenericCommand {

    /**
     * 初始化模板
     *
     * @return
     */
    Template initTemplate();

    /**
     * 初始化生成文件流
     *
     * @return
     */
    PrintWriter initWriter(String className);

    /**
     * 初始化模板上下文
     */
    VelocityContext initContext();

    /**
     * 模板文件生成核心代码
     */
    default void execute(String className) {

        Template template = initTemplate();
        PrintWriter writer = initWriter(className);

        template.merge(initContext(), writer);
        writer.flush();
        writer.close();

        afterReturn();
    }

    /**
     * 文件生成后置业务处理：如打印日志
     */
    void afterReturn();
}
